home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / loop.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  4KB  |  159 lines

  1. #ifndef _LINUX_LOOP_H
  2. #define _LINUX_LOOP_H
  3.  
  4. /*
  5.  * include/linux/loop.h
  6.  *
  7.  * Written by Theodore Ts'o, 3/29/93.
  8.  *
  9.  * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
  10.  * permitted under the GNU General Public License.
  11.  */
  12.  
  13. #define LO_NAME_SIZE    64
  14. #define LO_KEY_SIZE    32
  15.  
  16. #ifdef __KERNEL__
  17. #include <linux/bio.h>
  18. #include <linux/blkdev.h>
  19. #include <linux/spinlock.h>
  20.  
  21. /* Possible states of device */
  22. enum {
  23.     Lo_unbound,
  24.     Lo_bound,
  25.     Lo_rundown,
  26. };
  27.  
  28. struct loop_func_table;
  29.  
  30. struct loop_device {
  31.     int        lo_number;
  32.     int        lo_refcnt;
  33.     loff_t        lo_offset;
  34.     loff_t        lo_sizelimit;
  35.     int        lo_flags;
  36.     int        (*transfer)(struct loop_device *, int cmd,
  37.                     struct page *raw_page, unsigned raw_off,
  38.                     struct page *loop_page, unsigned loop_off,
  39.                     int size, sector_t real_block);
  40.     char        lo_file_name[LO_NAME_SIZE];
  41.     char        lo_crypt_name[LO_NAME_SIZE];
  42.     char        lo_encrypt_key[LO_KEY_SIZE];
  43.     int        lo_encrypt_key_size;
  44.     struct loop_func_table *lo_encryption;
  45.     __u32           lo_init[2];
  46.     uid_t        lo_key_owner;    /* Who set the key */
  47.     int        (*ioctl)(struct loop_device *, int cmd, 
  48.                  unsigned long arg); 
  49.  
  50.     struct file *    lo_backing_file;
  51.     struct block_device *lo_device;
  52.     unsigned    lo_blocksize;
  53.     void        *key_data; 
  54.  
  55.     int        old_gfp_mask;
  56.  
  57.     spinlock_t        lo_lock;
  58.     struct bio         *lo_bio;
  59.     struct bio        *lo_biotail;
  60.     int            lo_state;
  61.     struct semaphore    lo_sem;
  62.     struct semaphore    lo_ctl_mutex;
  63.     struct semaphore    lo_bh_mutex;
  64.     atomic_t        lo_pending;
  65.  
  66.     request_queue_t        *lo_queue;
  67. };
  68.  
  69. #endif /* __KERNEL__ */
  70.  
  71. /*
  72.  * Loop flags
  73.  */
  74. #define LO_FLAGS_READ_ONLY    1
  75.  
  76. #include <asm/posix_types.h>    /* for __kernel_old_dev_t */
  77. #include <asm/types.h>        /* for __u64 */
  78.  
  79. /* Backwards compatibility version */
  80. struct loop_info {
  81.     int           lo_number;        /* ioctl r/o */
  82.     __kernel_old_dev_t lo_device;         /* ioctl r/o */
  83.     unsigned long       lo_inode;         /* ioctl r/o */
  84.     __kernel_old_dev_t lo_rdevice;         /* ioctl r/o */
  85.     int           lo_offset;
  86.     int           lo_encrypt_type;
  87.     int           lo_encrypt_key_size;     /* ioctl w/o */
  88.     int           lo_flags;            /* ioctl r/o */
  89.     char           lo_name[LO_NAME_SIZE];
  90.     unsigned char       lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
  91.     unsigned long       lo_init[2];
  92.     char           reserved[4];
  93. };
  94.  
  95. struct loop_info64 {
  96.     __u64           lo_device;            /* ioctl r/o */
  97.     __u64           lo_inode;            /* ioctl r/o */
  98.     __u64           lo_rdevice;            /* ioctl r/o */
  99.     __u64           lo_offset;
  100.     __u64           lo_sizelimit;/* bytes, 0 == max available */
  101.     __u32           lo_number;            /* ioctl r/o */
  102.     __u32           lo_encrypt_type;
  103.     __u32           lo_encrypt_key_size;        /* ioctl w/o */
  104.     __u32           lo_flags;            /* ioctl r/o */
  105.     __u8           lo_file_name[LO_NAME_SIZE];
  106.     __u8           lo_crypt_name[LO_NAME_SIZE];
  107.     __u8           lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
  108.     __u64           lo_init[2];
  109. };
  110.  
  111. /*
  112.  * Loop filter types
  113.  */
  114.  
  115. #define LO_CRYPT_NONE        0
  116. #define LO_CRYPT_XOR        1
  117. #define LO_CRYPT_DES        2
  118. #define LO_CRYPT_FISH2        3    /* Twofish encryption */
  119. #define LO_CRYPT_BLOW        4
  120. #define LO_CRYPT_CAST128    5
  121. #define LO_CRYPT_IDEA        6
  122. #define LO_CRYPT_DUMMY        9
  123. #define LO_CRYPT_SKIPJACK    10
  124. #define LO_CRYPT_CRYPTOAPI    18
  125. #define MAX_LO_CRYPT        20
  126.  
  127. #ifdef __KERNEL__
  128. /* Support for loadable transfer modules */
  129. struct loop_func_table {
  130.     int number;    /* filter type */ 
  131.     int (*transfer)(struct loop_device *lo, int cmd,
  132.             struct page *raw_page, unsigned raw_off,
  133.             struct page *loop_page, unsigned loop_off,
  134.             int size, sector_t real_block);
  135.     int (*init)(struct loop_device *, const struct loop_info64 *); 
  136.     /* release is called from loop_unregister_transfer or clr_fd */
  137.     int (*release)(struct loop_device *); 
  138.     int (*ioctl)(struct loop_device *, int cmd, unsigned long arg);
  139.     struct module *owner;
  140. }; 
  141.  
  142. int loop_register_transfer(struct loop_func_table *funcs);
  143. int loop_unregister_transfer(int number); 
  144.  
  145. #endif
  146. /*
  147.  * IOCTL commands --- we will commandeer 0x4C ('L')
  148.  */
  149.  
  150. #define LOOP_SET_FD        0x4C00
  151. #define LOOP_CLR_FD        0x4C01
  152. #define LOOP_SET_STATUS        0x4C02
  153. #define LOOP_GET_STATUS        0x4C03
  154. #define LOOP_SET_STATUS64    0x4C04
  155. #define LOOP_GET_STATUS64    0x4C05
  156. #define LOOP_CHANGE_FD        0x4C06
  157.  
  158. #endif
  159.